package com.ljt.springdataredisdemo;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.concurrent.TimeUnit;

@SpringBootTest
public class CachePenetration {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Test
    public void cachePenetration() {
        // 查缓存
        String name = stringRedisTemplate.opsForValue().get("name");
        System.out.println("name = " + name);
        if (name != null){
            // 如果取出来的数据是空字符串，说明缓存穿透了
            if (name.isEmpty()){
                System.out.println("已经缓存了空值，这里返回null值");
                return;
                // 这里返回null回去
            }
            // 直接返回缓存数据
            System.out.println("返回值："+name);
            return;
        }
        // 查询数据库，发现name是null
        name = null;
        // 设置空值
        stringRedisTemplate.opsForValue().set("name", "", 20, TimeUnit.SECONDS);
        // 最后别忘了返回数据库查出来的值。
        System.out.println("返回值："+name);
        return;
    }
}
